package cn.ygh.bbo.system.service;

import cn.ygh.bbo.framerwork.core.BaseService;
import cn.ygh.bbo.framerwork.core.Grid;
import cn.ygh.bbo.system.bean.Permission;
import cn.ygh.bbo.system.bean.Role;
import org.springframework.data.domain.Pageable;
import java.io.Serializable;
import java.util.List;

/**
 * 描述：权限  Service
 * @author ygh
 */
public interface PermissionService extends BaseService {
    /**
     * 保存对象
     * @param permission 对象信息
     * @return
     */
    int save(Permission permission);

    /**
     * 更新对象
     * @param permission 对象信息
     * @return
     */
    int update(Permission permission);

    /**
     * 批量更新
     * @param permission 对象信息
     * @param ids
     * @return
     */
    int updateBatchByIds(Permission permission, Serializable[] ids);

    /**
    * 根据ID删除对象
    * @param id
    * @return
    */
    int deleteById(Serializable id);

    /**
    * 根据ID数组批量删除对象
    * @param ids
    * @return
    */
    int deleteByIds(Serializable[] ids);

    /**
    * 根据ID获取对象
    * @param id
    * @return
    */
    Permission getById(Serializable id);

    /**
    * 根据ID数组获取对象列表
    * @param ids
    * @return
    */
    List<Permission> listfindByIn(Serializable[] ids);

    /**
    * 根据对象信息获取满足条件的对象列表
    * @param permission 对象信息
    * @param pageable 分页条件为空则不分页
    * @return
    */
    List<Permission> listfind(Permission permission, Pageable pageable);

    /**
    * 根据对象信息获取满足条件的对象列表和总数
    * @param permission 对象信息
    * @param pageable 分页条件
    * @return
    */
    Grid listGrid(Permission permission, Pageable pageable);

    /**
     * 获取角色的相关操作权限列表
     * @param roles
     * @return
     */
    List<Permission> listfindByRoles(List<Role> roles);

    /**
     * 获取角色相关菜单和页面权限
     * @param roles
     * @return
     */
    List<Permission>listfindMenusByRoles(List<Role>roles);


    /**
     * 获取所有的菜单和页面权限
     * @return
     */
    List<Permission>listfindMenusAll();

    /**
     * 子权限个数
     * @param parentId
     * @return
     */
    long getCountByParentId(Integer parentId);

    /**
     * 获得所有的下属权限
     *
     * @param pid
     * @return
     */
    List<Permission> listfindByParentId(Integer pid);
}
